home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 11
/
Cream of the Crop 11-1.iso
/
games
/
ted5.zip
/
LIB_A.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-02-04
|
3KB
|
260 lines
;====================================================
;
; Library ASM code
;
;====================================================
IDEAL
P386N
MODEL medium,C
extrn xormask:WORD,yshift:WORD,CGAfont:WORD,VGAfont:WORD
DATASEG
SCindex = 3c4h
SCmapmask = 2
GCindex = 3CEh
GCreadmap = 4
GCmode = 5
a = 0
LABEL CGAlookup WORD
PUBLIC CGAlookup
REPT 100
dw a,a XOR 2000h
a = a+80
ENDM
a = 0
LABEL EGA1lookup WORD
PUBLIC EGA1lookup
REPT 200
dw a
a = a+40
ENDM
a = 0
LABEL EGA2lookup WORD
PUBLIC EGA2lookup
REPT 480
dw a
a = a+80
ENDM
a = 0
LABEL VGAlookup WORD
PUBLIC VGAlookup
REPT 200
dw a
a = a+320
ENDM
CODESEG
;====================================================
;
; Draw CGA chars
;
;====================================================
PROC CGAcharout
PUBLIC CGAcharout
ARG x:WORD,y:WORD,chr:BYTE
USES si,di,ds
mov bx,[y]
shl bx,1
shl bx,1
shl bx,1
shl bx,1
mov di,[CGAlookup+bx]
mov ax,[x]
shl ax,1
add di,ax
mov al,[chr]
xor ah,ah
shl ax,1
shl ax,1
shl ax,1
shl ax,1
mov si,ax
mov ax,0b800h
mov es,ax
mov ds,[CGAfont]
cld
cmp [ss:xormask],0
ja @@1
REPT 4
movsw
add di,2000h-2
movsw
sub di,2000h-78
ENDM
jmp @@exit
@@1:
REPT 4
lodsw
xor ax,0ffffh
stosw
add di,2000h-2
lodsw
xor ax,0ffffh
stosw
sub di,2000h-78
ENDM
@@exit:
ret
ENDP
;====================================================
;
; Draw EGA chars
;
;====================================================
PROC EGAcharout
PUBLIC EGAcharout
ARG x:WORD,y:WORD,chr:BYTE,video:WORD
USES si,di,ds,bp
mov dx,GCindex
mov ax,GCmode
out dx,ax
mov bx,[y]
shl bx,1
shl bx,1
shl bx,1
add bx,[yshift]
shl bx,1
cmp [video],1
jne @@0
mov cx,39
mov di,[EGA1lookup+bx]
jmp @@1
@@0:
mov cx,79
mov di,[EGA2lookup+bx]
@@1:
add di,[x]
mov ax,0a000h
mov es,ax
mov ds,ax
mov si,0f000h
mov al,[chr]
xor ah,ah
shl ax,1
shl ax,1
shl ax,1
add si,ax
cld
cmp [ss:xormask],0
ja @@2
mov dx,GCindex
mov ax,GCmode OR 100h
out dx,ax
mov dx,SCindex
mov ax,SCmapmask OR 0f00h
out dx,ax
REPT 8
movsb
add di,cx
ENDM
jmp @@exit
@@2:
ga = 100h
gb = 0
mov bp,si
mov bx,di
REPT 4
mov dx,SCindex
mov ax,SCmapmask OR ga
out dx,ax
mov dx,GCindex
mov ax,GCreadmap OR gb
out dx,ax
REPT 8
lodsb
xor al,0ffh
stosb
add di,cx
ENDM
mov di,bx
mov si,bp
ga = ga*2
gb = gb+100h
ENDM
@@exit:
mov dx,GCindex
mov ax,GCmode
out dx,ax
ret
ENDP
;====================================================
;
; Draw VGA chars
;
;====================================================
PROC VGAcharout
PUBLIC VGAcharout
ARG x:WORD,y:WORD,chr:BYTE
USES si,di,ds
mov bx,[y]
shl bx,1
shl bx,1
shl bx,1
add bx,[yshift]
shl bx,1
mov di,[VGAlookup+bx]
mov ax,[x]
shl ax,1
shl ax,1
shl ax,1
add di,ax
mov ah,[chr]
xor al,al
shr ax,1
shr ax,1 ;[chr]*64!
mov si,ax
mov ax,0a000h
mov es,ax
mov ds,[VGAfont]
cmp [ss:xormask],0
ja @@1
REPT 8
REPT 4
movsw
ENDM
add di,320-8
ENDM
jmp @@exit
@@1:
REPT 8
REPT 4
lodsw
xor ax,0ffffh
stosw
ENDM
add di,320-8
ENDM
@@exit:
ret
ENDP
END